//
//  LZTEmoticonTools.swift
//  LZTWeibo
//
//  Created by Yin jianxun on 16/8/19.
//  Copyright © 2016年 YinJianxun. All rights reserved.
//

import UIKit

// 表情键盘的最大列数 行数 和 每一页的显示个数
let LZTEmoticonMaxCol = 7
let LZTEmoticonMaxRow = 3
// -1的原因是空余最后一个 删除按钮
let LZTEmoticonMaxCount = LZTEmoticonMaxCol * LZTEmoticonMaxRow - 1

class LZTEmoticonTools: NSObject {
    
    
    //全局访问点
    static let sharedTools: LZTEmoticonTools = LZTEmoticonTools()
    
    //读取 emoticon的bundle文件
    lazy var emoticonsBundle: NSBundle = {
        
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        
        return NSBundle(path: path)!
    }()
    
    //默认表情的一位数组
    lazy var defaultEmoticons: [LZTEmoticonModel] = {
        
        return self.getEmoticonWithPath("default")
        
    }()
    //emoji表情的一位数组
    lazy var emojiEmoticons: [LZTEmoticonModel] = {
        
        return self.getEmoticonWithPath("emoji")
        
    }()
    //lxh表情的一位数组
    lazy var lxhEmoticons: [LZTEmoticonModel] = {
        
        return self.getEmoticonWithPath("lxh")
        
    }()
    
    //三维数组：保存上面的三个二维数组
    lazy var allEmoticons:[[[LZTEmoticonModel]]] = {
        
        return [
            self.getEmoticonGroupWithEmoticons(self.defaultEmoticons),
            self.getEmoticonGroupWithEmoticons(self.emojiEmoticons),
            self.getEmoticonGroupWithEmoticons(self.lxhEmoticons)
        ]
        
    }()
    
    //截取 每一页显示的数组并存储到另外一个数组中成为二维数组(该数组的count是指页数)
    func getEmoticonGroupWithEmoticons(emoticons: [LZTEmoticonModel]) -> [[LZTEmoticonModel]] {
        
        //获取最多显示的页数
        let pageCount = (emoticons.count + LZTEmoticonMaxCount - 1) / LZTEmoticonMaxCount
        
        //创建可变二维数组 用于展示每个底部button对应的页数
        var tempArray: [[LZTEmoticonModel]] = [[LZTEmoticonModel]]()
        
        //遍历页数
        for i in 0..<pageCount {
            
            let location = i * LZTEmoticonMaxCount
            var length = LZTEmoticonMaxCount
            
            //default表情的个数是108，最后一组是8个，会出现数组越界，因此最后一组应该重新计算长度
            if location + length > emoticons.count {
                
                length = emoticons.count - location
            }
            
            //截取范围
            let range = NSRange(location: location, length: length)
            
            //数组截取 并强转成一个一维数组
            let array = (emoticons as NSArray).subarrayWithRange(range) as! [LZTEmoticonModel]
            
            //添加数组
            tempArray.append(array)
        }
        return tempArray
    }
    
    //获取 default emoji 浪小花 各自的表情  返回一个对应的模型数组
    func getEmoticonWithPath(path: String) -> [LZTEmoticonModel] {
        
        //读取bundle中的info.plist
        let file = emoticonsBundle.pathForResource("\(path)/info.plist", ofType: nil)!
        
        let array = NSArray(contentsOfFile: file)!
        
        //创建临时数组
        var tempArray: [LZTEmoticonModel] = [LZTEmoticonModel]()
        
        //遍历字典 转模型
        for dic in array {
            
            let model = LZTEmoticonModel(dict: dic as! [String: AnyObject])
            
            //直接为model的属性path赋值
            model.path = "\(path)/"
            
            tempArray.append(model)
        }
        return tempArray
    }
    
    //遍历当前表情 所在的 图片表情一维数组：默认表情 或者 浪小花表情
    //判断当前的表情 属于谁
    func searchEmoticonInDefaultOrLxh(chs: String) -> LZTEmoticonModel? {
        
        //遍历 默认表情
        for emoticonModel in defaultEmoticons {
            
            //判断外界传入的chs和当前数组中的chs是否相等
            if emoticonModel.chs == chs {
                
                return emoticonModel
            }
        }
        //遍历 浪小花表情
        for emoticonModel in lxhEmoticons {
            
            //判断外界传入的chs和当前数组中的chs是否相等
            if emoticonModel.chs == chs {
                
                return emoticonModel
            }
        }
        
        return nil
    }

}
